package ch2;

public class Operater {
	public static void main(String[] args){
		String i = "Hello";
		
		//instanceof 用于判断某个对象是否是特定的数据类型，在反射或集合编程时常用
		if(i instanceof String){
			System.out.println("i的类型是字符串");
		}
		//运算符号的优先级别
		//算术运算>比较运算>逻辑运算
		
		//++ 和 --
		//局部变量必须先初始化，才能使用
		//int l,k = 2;
		int l=0,k = 2;
		k += ++k-k--*++k;
		//笔算或口算
		//1.先算赋值符号的右边，2.运算级别高的先算，3.按照四则运算的顺序进行计算
		//++k = 3
		//++k = 4
		//--k = 3
		//3-3*3 = -6

		System.out.println(k);
		
		//+号运算符号
		//1.做数学运算的加法运算
		//2.字符串连接
		
		int m = 10;
		char c = '中';
		
		//数字+字符 = 数字 + 字符的编码索引值
		int str=m+c;//自动类型转换，把字符char自动转换为int类型
		System.out.println(str);//计算结果是int类型，是数值类型
		
		String str2 = "" + m + c;//字符串+任何的数值类，会把数值转换为数值字符串，计算结果也是字符串
		System.out.println(str2);
		
		String str3 = m+c+"";//满足四则运算的规律：从左到右进行计算
		System.out.println(str3);//计算结果是String类型，是字符串类型，对象类型
		
		//逻辑运算
		//逻辑运算的结果都是Boolean值：true ， false
		//比较运算符的运算结果也是Boolean值
		boolean b = m*(m+c) > c*c && m*(m+c) >c || m*(m+c) >c ;//算术运算的优先级别高于比较运算，比较运算的优先级高于逻辑运算
		
		//对于复杂的表达式，需要掌握根据运算符号的优先级别进行拆分表达式
		//按照运算级别的从低到高进行拆分，运算则按照从高到低进行运算
		//m*(m+c) > c*c && m*(m+c) >c 和   m*(m+c) >c 
		//m*(m+c) > c*c 和  m*(m+c) >c
		
		System.out.println(b);
		
		//逻辑运算的短路
		//在进行逻辑或运算时，可能出现了短路现象：当有多个或运算进行串联时，从左向右进行运算，当左边有一个表达式结果为真，右边所有的家孙都被短路
		
		if(2>1 || 2+3>0 && false){
			System.out.println("大于0");
		}
		
		//在进行逻辑与运算时，可能出现短路现象：当有多个与运算进行串联时，会从左到右进行运算，当左边有任一个结果为假，右边所有的计算都被短路
		
		if(2+3>0 && false && 2>1){//true && false && true
			System.out.println("大于0");
		}
		
		//byte , short 和 char 进行算术运算时，会自动转换为int类型再进行计算，他们的计算结果是int类型
		byte b1 = 12;
		short s1=14;
		char c1 = 'A';
		//b1 = b1+b1;算术运算后的结果是int类型，不能直接保存到byte类型中
		int i1 = b1+b1;
		//s1 = b1+s1;算术运算后的结果是int类型，不能直接保存到short类型中
		//c1 = c1+12;算术运算后的结果是int类型，不能直接保存到char类型中
		
		long l1 = 1234;
		//int i2 = i1+l1;//int类型+long类型，小范围的数据类型与大范围的数据类型进行算术运算，会先把小范围的数据自动转换为大范围的数据，在进行运算
		l1 = i1+l1;
		
		//强制类型转换
		//大范围的数据转换为小范围的数据需要进行类型的强制转换，小数据类型=（数据类型）大数据值
		//数据类型的强制转换会导致数据精度的损失，高数据位会全部损失掉，如果是小数转整数，会把小数部分全部损失掉
		
		int h=77;
		int s=(h-32)*5/9;
		h=s*9/5+32;
		System.out.println(s+","+h);
		
		char q = 'A';
		q = (char)(q+32);
		System.out.println(q);

		
	} 

}
